package be.groept.ace.cursusplanning.persistency;

/**
 * @author Gouke Leplat
 */

import java.util.List;


import Log.Log;
import be.groept.ace.cursusplanning.model.Cursist;
import be.groept.ace.cursusplanning.model.Cursus;
import be.groept.ace.cursusplanning.model.Inschrijving;
import be.groept.ace.cursusplanning.model.Lector;
import be.groept.ace.cursusplanning.model.containers.Cursisten;
import be.groept.ace.cursusplanning.model.containers.Cursussen;
import be.groept.ace.cursusplanning.model.containers.Inschrijvingen;
import be.groept.ace.cursusplanning.model.containers.Lectoren;

public class DBMS implements IDBMS {
	
	private IPersistentieController pCTRL;

	

	/* !!!!! Deze klasse smijt bijna alles door aan de IPersistentieController.
	 *       Private variabelen moeten opgevraagd worden via de getters !
	 *       Ze komen van de IPersistentieController 
	 */
	public DBMS(IPersistentieController controller) throws IllegalArgumentException
	{
		pCTRL = controller;
		pCTRL.setConnectionString(getConnectionString());
		this.loadEntireEntitySet();
	}
	
	@Override
	public void loadEntireEntitySet() {
		
		try {		
			pCTRL.loadEntireEntitySet();
		} catch (Exception e) {
			Log.LOG("DBMS " + e.getMessage()); 
			//System shutdown
		}
		
	}
		
	/*  BEHEEER PERSISTENTIECONTROLLER */
	@Override
	public IPersistentieController getPersistentieController() {
		return pCTRL;
	}
	@Override
	public void setPersistenieController(IPersistentieController _ctrl) {
		if (_ctrl == null) throw new IllegalArgumentException(this.getClass().getSimpleName() + ": IpersistentieController cannot be null");
		this.pCTRL = _ctrl;
	}


	/* BASIC FUNCTIES DOORSMIJTEN NAAR PERSISTENTIECONTROLLER */
	@Override
	public Cursussen getCursussen() {		
		return pCTRL.getCursussen();
	}
	@Override
	public Cursisten getCursisten() {
		return pCTRL.getCursisten();
	}
	@Override
	public Inschrijvingen getInschrijvingen() {
		return pCTRL.getInschrijvingen();
	}
	@Override
	public Lectoren getLectoren() {
		return pCTRL.getLectoren();
	}


	/* SAVE Fuctie doorsmijten naar Persistentiecontroller*/
	@Override
	public Cursist saveOrSwapCursist(Cursist cursist) {
		return pCTRL.saveOrSwapCursist(cursist);
	}
	@Override
	public Cursus saveOrSwapCursus(Cursus cursus) {
		return pCTRL.saveOrSwapCursus(cursus);
	}
	@Override
	public Inschrijving saveOrSwapInschrijving(Inschrijving inschrijving) {
		return pCTRL.saveOrSwapInschrijving(inschrijving);
	}
	@Override
	public Lector saveOrSwapLector(Lector lector) {
		return pCTRL.saveOrSwapLector(lector);
	}

	
	/* CONVERSIE NAAR ARRAY */
	public Cursist[] getCursistenArray()
	{
		List<Cursist> lijst = getCursisten().getAll();
		Cursist[] obj = new Cursist[lijst.size()];
		
		for (int i = 0; i < lijst.size(); i++){
			obj[i] = lijst.get(i);
		}
		return obj;
	}
	public Cursus[] getCursussenarray(){
		List<Cursus> lijst = getCursussen().getAll();
		Cursus[] obj = new Cursus[lijst.size()];
		
		for (int i = 0; i < lijst.size(); i++){
			obj[i] = lijst.get(i);
		}
		return obj;
	}
	public Inschrijving[] getinschrijvingenarray(){
		List<Inschrijving> lijst = getInschrijvingen().getAll();
		Inschrijving[] obj = new Inschrijving[lijst.size()];
		
		for (int i = 0; i < lijst.size(); i++){
			obj[i] = lijst.get(i);
		}
		return obj;
	}
	public Lector[] getLectorenArray(){
		List<Lector> lijst = getLectoren().getAll();
		Lector[] obj = new Lector[lijst.size()];
		
		for (int i = 0; i < lijst.size(); i++){
			obj[i] = lijst.get(i);
		}
		return obj;
	}
	
	

	
	

	
	@Override
	public void setConnectionString(String connectionString) {
		pCTRL.setConnectionString(connectionString);
	}

	@Override
	public String getConnectionString() {
		return pCTRL.getConnectionString();
	}

	
	@Override
	public String getObjectKey(Persisteerbaar obj) {
		return pCTRL.getObjectKey(obj);
	}

	@Override
	public Persisteerbaar getObjectIfExists(String objectidentifier) {
		return pCTRL.getObjectIfExists(objectidentifier);
	}

	public boolean containsKey(String objectKey){
		return pCTRL.containsKey(objectKey);
	}

	@Override
	public void addToDataContext(Persisteerbaar obj, String objectKey) {
		pCTRL.addToDataContext(obj, objectKey);
	}
	
	@Override
	public void SubmitChangesMadeTo(Persisteerbaar obj){
		pCTRL.SubmitChangesMadeTo(obj);
	}





}
